import { Config } from 'config.js';
import { Token } from 'token.js';

class Base {
  constructor() {
    this.baseRestUrl = Config.restUrl;
    this.onPay = Config.onPay;
  }

  /**
   * 基类请求方法
   */
  request(params, noRefetch) {
    var that = this;
    var url = this.baseRestUrl + params.url;
    if (!params.type) {
      params.type = 'GET';
    }

    // 不需要再次组装地址
    if (params.setUpUrl == false) {
      url = params.url;
    }

    wx.request({
      url: url,
      data: params.data,
      method: params.type,
      dataType: 'json',
      header: {
        'content-type': 'application/json',
        'token': wx.getStorageSync('token')
      },
      success: function (res) {
        // 判断以2（2xx）开头的状态码为正确
        // 异常不要返回到回调中，就在request中处理，记录日志并showToast一个统一的错误即可
        var code = res.statusCode.toString();
        var startChar = code.charAt(0);
        if (startChar == '2') {
          params.sCallBack && params.sCallBack(res.data);
        } else {
          if (code == '401') {
            if (!noRefetch) {
              that._refetch(params);
            }
          }
          console.log(res);
          if (noRefetch) {
            params.eCallBack && params.eCallBack(res.data);
          }
        }

      },
      fail: function (res) {
        // request请求失败记录日志
        console.log(res);
      }
    })
  }

  _refetch(param) {
    var token = new Token();
    token.getTokenFromServer((token) => {
      this.request(param, true);
    });
  }

  /**
   * 获取元素上绑定的值
   */
  getDataSet(event, key) {
    return event.currentTarget.dataset[key];
  }
}

export { Base }